'''
Description: 
Version: 2.0
Autor: zyw
Date: 2021-12-22 10:28:17
LastEditors: zyw
LastEditTime: 2022-02-23 14:10:54
'''
import openpyxl
import os,sys
base_path = os.path.abspath(os.path.join(os.getcwd(),'.'))
sys.path.append(base_path)
'''
封装的需求：
    1、数据读取：封装一个可以读取任意excel文件的方法，可以指定读取的表单
    2、数据写入：写入文件的文件名，表单名，行号，列号，写入的内容
'''
class HandExcel(object):
    
    # 定义初始化方法，直接放入文件名和表单名
    def __init__(self,filename,sheetname):
        """
        :param filename: excel文件名(路径)
        :param sheetname: 表单名
        """
        self.filename = filename
        self.sheetname = sheetname
    
    def read_data(self):
        '''读取excel数据'''
        workbook = openpyxl.load_workbook(self.filename)
        # 获取指定sheet
        sh = workbook[self.sheetname]
        # rows：按行获取表单中所有的格子,每一行的格子自动放入一个元组中
        res = list(sh.rows)
        # 获取excel中第一行的数据
        title = [i.value for i in res[0]]
        cases = []
        # 遍历除第一行以外所有的数据
        for item in res[1:]:
            # 获取该行的数据放入列表中
            data = [i.value for i in item]
            # 将第一行表头和当前行的数据打包为字典
            dic = dict(zip(title,data))
            # 将字典添加到列表中
            cases.append(dic)
        return cases
        
    def write_data(self,row,column,value):
        """
        :param row: 写入的行号
        :param colum: 写入的列号
        :param value: 写入的值
        """
        # 加在工作薄对象
        workbook = openpyxl.load_workbook(self.filename)
        sh = workbook[self.sheetname]
        # 将数据写入excel指定位置,传入行、列、修改的值
        sh.cell(row=row, column=column, value=value)
        workbook.save(self.filename)
        
if __name__ == '__main__':
    excel = HandExcel(r'C:\Users\Administrator\Desktop\Erpinterface\interface_test_qkc\datas\api_test.xlsx','itemprice')
    res = excel.read_data() 
    print(res)
    